package br.com.hmm.mb;

import java.util.List;

import javax.faces.component.UIData;

import br.com.hmm.businesslogic.CategoriaService;
import br.com.hmm.entidade.Categoria;

/**
 * Classe que engloba toda as operações
 * referentes à camada de apresentação
 * de Categorias
 * @author carlos
 *
 */
public class ManterCategoriaBean extends GenericoBean {

	private Categoria categoria;

	private Categoria categoriaSelecionada;
	
	private List<Categoria> listaCategorias;
	
	private UIData tblCategoria;

	/**
	 * Construtor da classe ManterCategoriaBean
	 */
	public ManterCategoriaBean() {
		categoria = new Categoria();

	}

	/**
	 * 
	 * @return
	 */
	public Categoria getCategoria() {
		return categoria;
	}

	/**
	 * Define uma categoria
	 * 
	 * @param categoria
	 */
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Categoria getCategoriaSelecionada() {
		return categoriaSelecionada;
	}

	public void setCategoriaSelecionada(Categoria categoriaSelecionada) {
		this.categoriaSelecionada = categoriaSelecionada;
	}

	public List<Categoria> getListaCategorias() {
		return listaCategorias;
	}

	public void setListaCategorias(List<Categoria> listaCategorias) {
		this.listaCategorias = listaCategorias;
	}

	public UIData getTblCategoria() {
		return tblCategoria;
	}

	public void setTblCategoria(UIData tblCategoria) {
		this.tblCategoria = tblCategoria;
	}

	/**
	 * Exibe na tela uma mensagem
	 * de erro ou sucesso dependendo
	 * do retono do método inserir da class
	 * CategoriaService.
	 * 
	 * 
	 * @return String
	 */
	public String gravar() {
		try {
			if (CategoriaService.inserir(categoria) == true) {
				atualizarLista();				
				adicionarMensagem("Categoria inserida com sucesso.");
			} else {
				adicionarMensagemErro("A categoria já existe.");
				categoria = new Categoria();
			}

		} catch (Exception e) {
			adicionarMensagemErro(e.getLocalizedMessage());
		}
		return "";

	}

	/**
	 * Cria uma novo objeto Categoria
	 * e lista todas categorias
	 * existentes
	 * @return String
	 */
	public String novaCategoria() {
		categoria = new Categoria();
		findAll();
		return "goCategoria";
	}

	/**
	 * Exibe mensagem de erro ou
	 * sucesso de atualização de 
	 * categoria dependendo do retorno
	 * do método atualizarCategoria
	 * da class CategoriaService
	 * 
	 * @return String
	 */
	public String atualizar() {
		try {
			if (CategoriaService.atualizarCategoria(categoriaSelecionada) == true) {
				adicionarMensagem("Categoria atualizada com sucesso.");
			}
		} catch (Exception e) {
			adicionarMensagemErro("Não foi possível atualizar a categoria selecionada.");
		}
		return novaCategoria();
	}

	/**
	 * Lista na tela todas as
	 * categorias existentes
	 * @return String
	 */
	public String findAll() {
		try {
			setListaCategorias(CategoriaService.list());
			if (listaCategorias.isEmpty()) {
				adicionarMensagemErro("Nenhuma categoria foi encontrada.");
			} 
		} catch (Exception e) {
			adicionarMensagemErro("Nenhuma categoria foi encontrada." );
		}
		return "";
	}
	
	/**
	 * Exibe na tela mensagem
	 * de sucesso ou erro em relação
	 * a deleção de uma categoria,
	 * dependendo do retorno do método
	 * delete da class CategoriaService
	 * @return String
	 */
	public String delete(){
		try{
			this.categoriaSelecionada = (Categoria) tblCategoria.getRowData(); 
			if(CategoriaService.delete(categoriaSelecionada) == true){
				listaCategorias.remove(tblCategoria.getRowIndex());
				adicionarMensagem("Categoria removida com sucesso.");
			}else{
				adicionarMensagemErro("Não foi possível remover essa categoria.");
			}
		}catch(Exception e){
			adicionarMensagemErro(e.getLocalizedMessage());
		}
	return "";
	}
	
	/**
	 * Atualiza lista de categorias
	 */
	public void atualizarLista(){
		categoria = new Categoria();
		findAll();
	}
	
	/**
	 * Redireciona o usuário pra
	 * tela de edição de categorias
	 * @return String
	 */
	public String edicaoCategoria(){
		categoriaSelecionada = (Categoria) tblCategoria.getRowData();		
		return "goCategoriaEdicao";
	}
	
	
	public String voltar(){
		return "goCategoria";
	}
	
	


}
